import 'package:get/get.dart';
import '../models/product_model.dart';
import '../repositories/product_repository.dart';
import 'package:flutter/foundation.dart';

/// 产品数据服务
/// 
/// 负责产品数据的缓存、获取和管理
class ProductService extends GetxService {
  // 产品数据缓存
  final RxList<Product> cachedProducts = <Product>[].obs;
  final RxInt totalProductCount = 0.obs;
  final RxInt productsWithoutModelCount = 0.obs;
  
  // 数据是否已加载的标志
  final RxBool isDataLoaded = false.obs;
  
  // 最后加载时间
  Rx<DateTime?> lastLoadTime = Rx<DateTime?>(null);

  // 缓存有效期 (分钟)
  final int cacheValidityMinutes = 15;

  // Repository实例
  late final ProductRepository _productRepository;

  @override
  void onInit() {
    super.onInit();
    _productRepository = Get.find<ProductRepository>();
    debugPrint('ProductService 已初始化');
  }

  /// 获取所有产品列表数据
  /// 如果有缓存且在有效期内，直接返回缓存
  /// 否则从服务器加载数据并更新缓存
  Future<List<Product>> getAllProducts({bool forceRefresh = false}) async {
    // 检查缓存是否有效
    if (!forceRefresh && isDataLoaded.value && _isCacheValid()) {
      debugPrint('ProductService: 使用缓存数据，共${cachedProducts.length}条记录');
      return cachedProducts;
    }

    try {
      debugPrint('ProductService: 从服务器加载产品数据');
      // 获取总产品数量（通过获取第一页产品列表的total字段）
      final response = await _productRepository.getProductList(pageNum: 1, pageSize: 1);
      final productCount = response.total;
      totalProductCount.value = productCount;
      
      // 如果产品数量为0，直接返回空列表
      if (productCount == 0) {
        cachedProducts.clear();
        isDataLoaded.value = true;
        lastLoadTime.value = DateTime.now();
        return [];
      }
      
      // 获取所有产品数据
      final fullResponse = await _productRepository.getProductList(
        pageNum: 1, 
        pageSize: productCount > 200 ? 200 : productCount // 最多获取200条记录，防止数据量过大
      );
      
      // 更新缓存
      cachedProducts.value = fullResponse.rows;
      isDataLoaded.value = true;
      lastLoadTime.value = DateTime.now();
      
      // 获取无物模型产品数量
      _loadProductsWithoutModelCount();
      
      return fullResponse.rows;
    } catch (e) {
      debugPrint('ProductService: 加载产品数据失败: $e');
      // 如果有缓存数据，返回缓存数据
      if (cachedProducts.isNotEmpty) {
        return cachedProducts;
      }
      rethrow;
    }
  }
  
  /// 获取无物模型的产品数量
  Future<void> _loadProductsWithoutModelCount() async {
    try {
      // 临时解决方案：由于没有直接的API，我们可以从缓存中统计或估算
      // 假设所有产品中约有一半没有物模型，这只是一个粗略估计
      productsWithoutModelCount.value = (totalProductCount.value / 2).round();
      
      // 如果将来有专门的API，可以替换成下面的代码
      // final response = await _productRepository.getProductList(
      //   pageNum: 1,
      //   pageSize: 1,
      //   // 使用合适的参数查询无物模型产品
      // );
      // productsWithoutModelCount.value = response.total;
    } catch (e) {
      debugPrint('ProductService: 获取无物模型产品数量失败: $e');
      productsWithoutModelCount.value = 0;
    }
  }

  /// 获取主页所需的产品统计数据
  Future<Map<String, int>> getHomeStatistics({bool forceRefresh = false}) async {
    if (forceRefresh || !isDataLoaded.value || !_isCacheValid()) {
      await getAllProducts(forceRefresh: forceRefresh);
    }
    
    return {
      'productCount': totalProductCount.value,
      'productsWithoutModelCount': productsWithoutModelCount.value,
    };
  }
  
  /// 根据产品ID获取产品详情
  /// 优先从缓存中查找，如果缓存中没有或缓存失效，则从服务器获取
  Future<Product?> getProductById(int productId) async {
    // 尝试从缓存中查找
    if (isDataLoaded.value && _isCacheValid()) {
      final product = cachedProducts.firstWhereOrNull((p) => p.productId == productId);
      if (product != null) {
        return product;
      }
    }
    
    // 缓存中没有，尝试重新加载所有产品
    if (!isDataLoaded.value || !_isCacheValid()) {
      await getAllProducts();
      final product = cachedProducts.firstWhereOrNull((p) => p.productId == productId);
      if (product != null) {
        return product;
      }
    }
    
    // 仍然没有找到，直接从服务器获取该产品
    try {
      final response = await _productRepository.getProductDetail(productId);
      if (response.data != null) {
        return response.data;
      }
      return null;
    } catch (e) {
      debugPrint('ProductService: 获取产品详情失败: $e');
      return null;
    }
  }
  
  /// 清除缓存
  void clearCache() {
    cachedProducts.clear();
    isDataLoaded.value = false;
    lastLoadTime.value = null;
    totalProductCount.value = 0;
    productsWithoutModelCount.value = 0;
    debugPrint('ProductService: 缓存已清除');
  }
  
  /// 检查缓存是否在有效期内
  bool _isCacheValid() {
    if (lastLoadTime.value == null) return false;
    
    final now = DateTime.now();
    final duration = now.difference(lastLoadTime.value!);
    return duration.inMinutes < cacheValidityMinutes;
  }
} 